//app.js
import {
  getAddressInfo,
  getSettingInfo
} from './api/common.js';
import {
  removeObj
} from './utils/removeObj.js';

//获取地址信息  获取配置信息
App({
  onLaunch: function () {
    let _this = this;
    let menuButtonObject = wx.getMenuButtonBoundingClientRect();
    wx.getSystemInfo({
      success: res => {
        let statusBarHeight = res.statusBarHeight,
          navTop = menuButtonObject.top, //胶囊按钮与顶部的距离
          navHeight = statusBarHeight + menuButtonObject.height + (menuButtonObject.top - statusBarHeight) * 2; //导航高度
        let arr = _this.globalData.modelmeArr;
        arr.forEach(e => {
          if (res.model.indexOf(e) != -1) {
            _this.globalData.modelmeArr = true
          }
        })
        _this.globalData.statusBarHeight = statusBarHeight;
        _this.globalData.navHeight = navHeight;
        _this.globalData.navTop = navTop;
        _this.globalData.windowHeight = res.windowHeight;
      },
      fail(err) {
        console.log(err);
      }
    })
    // 小程序主动更新
    this.updateManager();
    if (this.compareVersion(wx.getSystemInfoSync().SDKVersion, '2.7.7') == 1) {
      console.log('当前用户基础库版本:', wx.getSystemInfoSync().SDKVersion)
    } else {
      // 如果希望用户在最新版本的客户端上体验您的小程序，可以这样子提示
      wx.showModal({
        title: '提示',
        content: '当前微信版本过低，无法使用该功能，请升级到最新微信版本后重试。'
      })
    }
  },
  compareVersion(v1, v2) {
    v1 = v1.split('.')
    v2 = v2.split('.')
    const len = Math.max(v1.length, v2.length)

    while (v1.length < len) {
      v1.push('0')
    }
    while (v2.length < len) {
      v2.push('0')
    }

    for (let i = 0; i < len; i++) {
      const num1 = parseInt(v1[i])
      const num2 = parseInt(v2[i])

      if (num1 > num2) {
        return 1
      } else if (num1 < num2) {
        return -1
      }
    }

    return 0
  },
  //获取地址信息
  _getAddressInfo(callback) { // 获取国省市三级数据
    if (this.globalData.objectMultiArray.length != 0) { //有数据且有回调时直接返回数据
      callback([this.globalData.multiArray, this.globalData.objectMultiArray])
    } else { //其它情况下请求数据
      getAddressInfo().then(res => {
        let d = res.data.countryList != null ? res.data : res.data.data;
        let countryList = [];
        let provinceList = [];
        let cityList = [];
        d.countryList.forEach(e => {
          countryList.push(e.regName)
        })
        d.provinceList.forEach(e => {
          provinceList.push(e.regName)
        })
        d.cityList.forEach(e => {
          cityList.push(e.regName)
        })
        let arr = [];
        arr.push(countryList, provinceList, cityList)
        let arr1 = [];
        arr1.push(d.countryList, d.provinceList, d.cityList)
        this.globalData.objectMultiArray = arr1;
        this.globalData.multiArray = arr;
        callback([arr, arr1])
      })
    }
  },
  previewImg(arr, index = 0) {
    wx.previewImage({
      current: arr[index], // 当前显示图片的http链接  
      urls: arr // 需要预览的图片http链接列表  
    })
  },
  //获取配置信息
  _getSettingInfo(callback) {
    let info = this.globalData.settingInfo
    if (info != '' && info != null) { //不为空
      callback(info)
    } else { //其它情况下请求数据
      getSettingInfo().then(res => {
        this.globalData.settingInfo = removeObj(res.data, ['searchValue', 'createBy', 'createTime', 'updateBy', 'updateTime', 'params', 'serverPhone1', 'serverPhone2']);
        callback(res.data)
      })
    }
  },

  // 传入国省市index数组，返回对应数组和index数组
  _processingAreaData(e) {
    let indexArr = e;
    let objectMultiArray = this.globalData.objectMultiArray;
    let regId2 = objectMultiArray[0][e[0]].regId // 获取国家id
    let regId3 = 0;
    let list1 = [];
    let list2 = [];
    let list3 = [];
    objectMultiArray[0].forEach(a => { // 循环国
      list1.push(a.regName)
    })
    objectMultiArray[1].forEach((b, vi) => { // 循环省
      if (regId2 == b.parId) { // 国家ID与省的父ID匹配才进入
        list2.push(b.regName) // 匹配成功时保存省
        if (vi == e[1]) { // 省份下标匹配成功时
          regId3 = b.regId // 获取省id
        }
      }
    })
    if (list2.length > 0) { // 省的数量大于0时匹配市
      objectMultiArray[2].forEach(c => { //循环市
        if (regId3 == c.parId) {
          list3.push(c.regName)
        }
      })
    } else {
      e[2] == 0
    }
    return Object.assign({
      multiArray: [list1, list2, list3]
    }, {
      multiIndex: e
    });
  },

  //传入国省市名称 返回index数组
  getIndex(arr, callback) {
    let indexArr = [0, 0, 0]
    let a = arr[0]; // 国名称
    let countyId = 0; // 国ID
    let pId = 0; // 省ID
    let cityId = 0; // 市ID
    let b = ''; // 省名称
    let c = ''; //市名称
    let list2 = []; // 匹配成功的省数组
    let list3 = []; // 匹配成功的市数组
    if (arr.length >= 2) {
      b = arr[1];
    }
    if (arr.length >= 3) {
      c = arr[2];
    }
    this._getAddressInfo(data => {
      let multiArray = data[0]; // 国省市名称数组
      let objectMultiArray = data[1]; // 国省市数组
      objectMultiArray[0].forEach((d, e) => {
        if (a == d.regName) { // 匹配国家名称
          indexArr[0] = e
          countyId = d.regId // 国家ID
          // 匹配到后循环省匹配父ID为此国家的
          objectMultiArray[1].forEach((f, g) => {
            if (countyId == f.parId) { // 满足条件的放在数组内 (国ID和省父ID匹配)
              list2.push(f)
            }
            if (g == objectMultiArray[1].length - 1) { //全部匹配结束时进入
              list2.forEach((h, i) => {
                if (b == h.regName) { // 省名称匹配成功时
                  pId = h.regId // 省ID
                  indexArr[1] = i
                  objectMultiArray[2].forEach((j, k) => {
                    if (pId == j.parId) { // 满足条件的放在数组内 (省ID和市父ID匹配)
                      list3.push(j)
                    }
                    if (k == objectMultiArray[2].length - 1) { //全部匹配结束时进入
                      list3.forEach((l, m) => {
                        if (c == l.regName) { // 省名称匹配成功时
                          indexArr[2] = m
                          callback(indexArr)
                        }
                      })
                    }
                  })
                }
              })
            }
          })
        }
      })
    })

  },

  /**
   * 小程序主动更新
   */
  updateManager() {
    if (!wx.canIUse('getUpdateManager')) {
      return false;
    }
    const updateManager = wx.getUpdateManager();
    updateManager.onCheckForUpdate(function (res) {
      // 请求完新版本信息的回调
      // console.log(res.hasUpdate)
    });
    updateManager.onUpdateReady(function () {
      wx.showModal({
        title: '更新提示',
        content: '新版本已经准备好，即将重启应用',
        showCancel: false,
        success(res) {
          if (res.confirm) {
            // 新的版本已经下载好，调用 applyUpdate 应用新版本并重启
            updateManager.applyUpdate()
          }
        }
      });
    });
    updateManager.onUpdateFailed(function () {
      // 新的版本下载失败
      wx.showModal({
        title: '更新提示',
        content: '新版本下载失败',
        showCancel: false
      })
    });
  },
  removeFiles(pathsShouldDelete, callback) { // 卸载已经下载的文件（canvas组件绘制的）
    // wx.getSavedFileList({
    //   success: (listRes) => {
    //     console.log(listRes)
    //   },
    //   fail: (getError) => {
    //     console.error(`getSavedFileList failed, ${JSON.stringify(getError)}`);
    //   },
    // });
    // console.log(pathsShouldDelete)
    // let path = wx.getStorageSync('savedFiles')[pathsShouldDelete];
    // let url = path.path
    // let size = path.size
    callback(true)
    // wx.removeSavedFile({
    //   filePath: url,
    //   success:res=>{
    //     // console.log(res)
    //     //成功后删除缓存的图片链接数据
    //     let obj = wx.getStorageSync('savedFiles')
    //     obj = removeObj(obj, [pathsShouldDelete]) //移除图片
    //     obj.totalSize -= size //减掉图片容量大小
    //     wx.setStorageSync('savedFiles', obj)//重新赋值
    //     callback(true)
    //   },
    //   fail: error => {
    //     callback(true)
    //     console.error(`removeSavedFile failed, ${JSON.stringify(error)}`);
    //   },
    //   complete: res => {
    //     wx.getSavedFileList({
    //       success: (listRes) => {
    //         console.log(listRes)
    //       },
    //       fail: (getError) => {
    //         console.error(`getSavedFileList failed, ${JSON.stringify(getError)}`);
    //       },
    //     });
    //   }
    // });
  },
  // 传入时间返回距离今天时间差
  timeFn(d1, type = '-', accurate = true) { //di作为一个变量传进来 accurate=true时是精确到毫秒，有传时精确到天
    //如果时间格式是正确的，那下面这一步转化时间格式就可以不用了
    if (type == '.') {
      d1 = d1.replace(/\./g, "/") //将.转化为/
    } else if (type == '-') {
      d1 = d1.replace(/-/g, "/") //将-转化为/
    }
    if (!accurate) { //精确到天的对时间进行处理
      d1 = d1.split(' ')[0] + ' 00:00:00'
    }
    var dateBegin = new Date(d1);
    var dateEnd = new Date(); //获取当前时间
    if (!accurate) { //精确到天的对时间进行处理
      let s = dateEnd.getFullYear() + '/' + (dateEnd.getMonth() + 1) + '/' + dateEnd.getDate() + ' 00:00:00'
      dateEnd = new Date(s)
    }
    var dateDiff = dateEnd.getTime() - dateBegin.getTime(); //时间差的毫秒数
    let state = true
    if (dateDiff < 0) {
      dateDiff = dateDiff.toString()
      dateDiff = Number(dateDiff.substr(1, dateDiff.length))
      state = false
    }
    var dayDiff = Math.floor(dateDiff / (24 * 3600 * 1000)); //计算出相差天数
    var leave1 = dateDiff % (24 * 3600 * 1000) //计算天数后剩余的毫秒数
    var hours = Math.floor(leave1 / (3600 * 1000)) //计算出小时数
    //计算相差分钟数
    var leave2 = leave1 % (3600 * 1000) //计算小时数后剩余的毫秒数
    var minutes = Math.floor(leave2 / (60 * 1000)) //计算相差分钟数
    //计算相差秒数
    var leave3 = leave2 % (60 * 1000) //计算分钟数后剩余的毫秒数
    var seconds = Math.round(leave3 / 1000)
    // console.log(" 相差 " + dayDiff + "天 " + hours + "小时 " + minutes + " 分钟" + seconds + " 秒")
    // console.log(dateDiff + "时间差的毫秒数", dayDiff + "计算出相差天数", leave1 + "计算天数后剩余的毫秒数"
    //   , hours + "计算出小时数", minutes + "计算相差分钟数", seconds + "计算相差秒数");
    return [dayDiff, hours, minutes, seconds, state]
  },
  removeBlank(data) {
    return data.replace(/\s+/g, "")
  },
  globalData: {
    sessionId: '',
    settingInfo: '',
    servicePhoneList: [],
    statusBarHeight: '',
    navHeight: '',
    navTop: '',
    windowHeight: '',
    bgColor: '#fff',
    color: 'black',
    v: '1.5.1',
    userInfo: null,
    multiArray: [], //国省市三级名
    objectMultiArray: [], //国省市三级（全）
    sizeArray: ['S码', 'M码', 'L码', 'XL码', 'XXL码', 'XXXL码'],
    BASE_URL: 'https://mp.ywxktrip.com',
    // BASE_URL: 'http://192.168.31.136:8082',
    // BASE_URL: 'https://zx.sweim.top',
    webSocketUrl: 'wss://mp.ywxktrip.com',
    // webSocketUrl: 'ws://192.168.31.136:8082',
    // webSocketUrl: 'wss://zx.sweim.top',
    modelmeArr: ['iPhone X', 'iPhone 11 Pro Max'],
    tempData: '', //存放页面传输的临时数据（使用后记得清除）
    liveShowNetworkTips: true, //主播网络环境提示模态框展示
    // oss文件上传配置数据
    oss: {
      baseUrl: 'https://oss-images.ywxktrip.com',
      accessid: 'LTAI4Fps3ZKFauxBMeQrpTVE',
      accesskey: 'Mbnbfx5jqeRp37QJXtqk4x6Weu9SLc',
      host: 'https://oss-images.ywxktrip.com'
    }
  }
})